const fs = require('fs');
const log4j = require('../utils/log4j');
const cors = require('koa2-cors');
const { CORS_PATH } = require('../config/path');

/**
 * 用于注册路由的函数
 * @param {object} app - Koa 应用实例
 */
function registerRouters(app) {
    // 添加CORS中间件
    app.use(cors({
        // 任何地址都可以访问
        origin: CORS_PATH,
        // 指定地址才可以访问
        // origin: 'http://localhost:8080',
        maxAge: 2592000,
        // 必要配置
        credentials: true
    }));

    // 添加记录请求日志的中间件
    app.use(async (ctx, next) => {
        // 记录 GET 请求参数
        log4j.info(`get: ${JSON.stringify(ctx.request.params)}`);
        // 记录 POST 请求参数
        log4j.info(`params: ${JSON.stringify(ctx.request.body)}`);

        const start = new Date();
        await next();
        const ms = new Date() - start;
        console.log(`${ctx.method} ${ctx.url} - ${ms}ms`);
    });

    // 读取当前文件夹下的所有文件
    // 忽略语法检查
    // eslint-disable-next-line no-undef
    const files = fs.readdirSync(__dirname);

    // 遍历所有的文件
    for (const file of files) {
        if (!file.endsWith('.router.js')) continue;

        // 导入路由模块
        const router = require(`./${file}`);

        // 将路由模块注册到 Koa 应用
        app.use(router.routes());
        app.use(router.middleware());
    }
}

module.exports = registerRouters;
